package com.airbnb.airpal.modules; import com.airbnb.airpal.AirpalConfiguration; import com.airbnb.airpal.api.output.CSVPersistentOutput; import com.airbnb.airpal.api.output.HiveTablePersistentOutput; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.health.HealthCheckRegistry; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.jsontype.NamedType; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Singleton; import com.hubspot.rosetta.Rosetta; import io.dropwizard.setup.Environment; public class DropwizardModule extends AbstractModule { private final Environment environment; private final AirpalConfiguration configuration; public DropwizardModule(AirpalConfiguration configuration, Environment environment) { this.configuration = configuration; this.environment = environment; } @Override protected void configure() { bind(MetricRegistry.class).toInstance(environment.metrics()); bind(HealthCheckRegistry.class).toInstance(environment.healthChecks()); } @Singleton @Provides protected ObjectMapper provideObjectMapper() { ObjectMapper mapper = environment.getObjectMapper(); mapper.registerSubtypes( new NamedType(CSVPersistentOutput.class, "csv"), new NamedType(HiveTablePersistentOutput.class, "hive") ); Rosetta.getMapper().disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); Rosetta.getMapper().enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES); return mapper; } }